#include "gtkmenushellprivate.h"
#include "gtkmnemonichash.h"
#include "gtkwindow.h"
+#include "gtkwindowprivate.h"
#include "gtkprivate.h"
#include "gtkmain.h"
#include "gtkintl.h"
GtkWidget *menu_item;
GtkWidget *parent;
+ if (event->type == GDK_2BUTTON_PRESS)
+ return _gtk_window_handle_button_press_for_widget (widget, event);
+
if (event->type != GDK_BUTTON_PRESS)
return FALSE;
{
if (!initially_active)
{
- gboolean window_drag = FALSE;
-
- gtk_widget_style_get (widget,
- "window-dragging", &window_drag,
- NULL);
-
- if (window_drag)
- {
- gtk_menu_shell_deactivate (menu_shell);
- gtk_window_begin_move_drag (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
- event->button,
- event->x_root,
- event->y_root,
- event->time);
- }
+ if (_gtk_window_handle_button_press_for_widget (widget, event))
+ gtk_menu_shell_deactivate (menu_shell);
}
}
}
#include "gtktypebuiltins.h"
#include "gtkwidgetpath.h"
#include "gtkwidgetprivate.h"
+#include "gtkwindowprivate.h"
/**
{
show_menu (toolbar, event);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
-
+
return TRUE;
}
gtk_toolbar_button_press (GtkWidget *toolbar,
GdkEventButton *event)
{
- GtkWidget *window;
-
if (gdk_event_triggers_context_menu ((GdkEvent *) event))
{
gboolean return_value;
return return_value;
}
- if (event->type != GDK_BUTTON_PRESS)
- return FALSE;
-
- window = gtk_widget_get_toplevel (toolbar);
-
- if (window)
- {
- gboolean window_drag = FALSE;
-
- gtk_widget_style_get (toolbar,
- "window-dragging", &window_drag,
- NULL);
-
- if (window_drag)
- {
- gtk_window_begin_move_drag (GTK_WINDOW (window),
- event->button,
- event->x_root,
- event->y_root,
- event->time);
-
- return TRUE;
- }
- }
-
- return FALSE;
+ return _gtk_window_handle_button_press_for_widget (toolbar, event);
}
static gboolean
gtk_widget_class_install_style_property (klass,
g_param_spec_boolean ("window-dragging",
P_("Window dragging"),
- P_("Whether windows can be dragged by clicking on empty areas"),
+ P_("Whether windows can be dragged and maximized by clicking on empty areas"),
FALSE,
GTK_PARAM_READABLE));
gtk_widget_queue_draw (widget);
}
+
+gboolean
+_gtk_window_handle_button_press_for_widget (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ gboolean processed = FALSE;
+ gboolean window_drag = FALSE;
+ GtkWindow *window;
+
+ gtk_widget_style_get (GTK_WIDGET (widget),
+ "window-dragging", &window_drag,
+ NULL);
+
+ if (!window_drag)
+ return FALSE;
+
+ if (event->button != GDK_BUTTON_PRIMARY)
+ return FALSE;
+
+ window = GTK_WINDOW (gtk_widget_get_toplevel (widget));
+
+ switch (event->type)
+ {
+ case GDK_BUTTON_PRESS:
+ gtk_window_begin_move_drag (window,
+ event->button,
+ event->x_root,
+ event->y_root,
+ event->time);
+ processed = TRUE;
+ break;
+
+ case GDK_2BUTTON_PRESS:
+ {
+ GdkWindow *gdk_window = gtk_widget_get_window (GTK_WIDGET (window));
+
+ if (gdk_window_get_state (gdk_window) & GDK_WINDOW_STATE_MAXIMIZED)
+ gdk_window_unmaximize (gdk_window);
+ else
+ gdk_window_maximize (gdk_window);
+
+ processed = TRUE;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return processed;
+}
const GtkAllocation *allocation,
GtkAllocation *allocation_out);
+gboolean _gtk_window_handle_button_press_for_widget (GtkWidget *widget,
+ GdkEventButton *event);
+
typedef void (*GtkWindowKeysForeachFunc) (GtkWindow *window,
guint keyval,
GdkModifierType modifiers,